pub fn convert_base(num_str: &str, to_base: u32) -> String {
    // 解析输入字符串，提取数字部分和源进制
    let open_paren = num_str.find('(').unwrap();
    let close_paren = num_str.find(')').unwrap();
    
    // 获取数字部分和源进制部分
    let num_part = &num_str[..open_paren];
    let from_base = num_str[open_paren + 1..close_paren].parse::<u32>().unwrap();

    // 将输入的数字字符串从原进制转换为 10 进制整数
    let mut decimal_value = 0;
    let mut power = 1;

    // 从右到左遍历 num_str 中的每个字符
    for digit_char in num_part.chars().rev() {
        let digit_value = match digit_char {
            '0'..='9' => digit_char.to_digit(10).unwrap(),
            'a'..='f' => digit_char.to_digit(16).unwrap(),
            'A'..='F' => digit_char.to_digit(16).unwrap(),
            _ => panic!("Invalid character in number string"),
        };
        decimal_value += digit_value * power;
        power *= from_base;
    }

    // 将 10 进制整数转换为目标进制
    if decimal_value == 0 {
        return "0".to_string(); // 处理特殊情况：0
    }

    let mut result = String::new();
    while decimal_value > 0 {
        let digit = decimal_value % to_base;
        let digit_char = match digit {
            0..=9 => char::from_digit(digit, 10).unwrap(),
            10..=15 => char::from_digit(digit, 16).unwrap(),
            _ => panic!("Invalid digit"),
        };
        result.push(digit_char);
        decimal_value /= to_base;
    }

    // 返回结果时需要反转字符，因为我们是从低位到高位构建的结果
    result.chars().rev().collect()
}